模式匹配
最近更新时间: 2024-10-17 17:10:00
LIKE
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
如果该 string 匹配了提供的 pattern,那么 LIKE 表达式返回真,和预期的一样,如果 LIKE 返回真,那么 NOT LIKE 表达式返回假,反之亦然。
一个等效的表达式是 NOT (string lIKE pattern)。
示例:
postgres=# SELECT 'abc' LIKE 'abc';
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' LIKE 'a%';
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' LIKE '_b_';
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' LIKE 'c';
?column?
----------
f
(1 row)
SIMILAR TO 正则表达式
string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]
SIMILAR TO 操作符根据自己的模式是否匹配给定串而返回真或者假。它和 LIKE 非常类似,只不过它使用 SQL 标准定义的正则表达式理解模式。
SIMILAR 除了从 LIKE 借用的功能外,还支持下面这些从 POSIX 正则表达式借用的模式匹配元字符:
| 表示选择(两个候选之一)。
- 表示重复前面的项零次或更多次。
- 表示重复前面的项一次或更多次。
? 表示重复前面的项零次或一次。
{m} 表示重复前面的项刚好 m 次。
{m,} 表示重复前面的项 m 次或更多次。
{m,n} 表示重复前面的项至少 m 次并且不超过 n 次。
可以使用圆括号 () 把多个项组合成一个逻辑项。
一个方括号表达式 [...] 声明一个字符类,就像 POSIX 正则表达式一样。
注意点号(.)不是 SIMILAR TO 的一个元字符。
示例:
postgres=# SELECT 'abc' SIMILAR TO 'abc';
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' SIMILAR TO 'a';
?column?
----------
f
(1 row)
postgres=# SELECT 'abc' SIMILAR TO '%(b|d)%';
?column?
----------
t
(1 row)
POSIX 正则表达式
POSIX 正则表达式比 LIKE 和 SIMILAR TO 操作符更强大。
POSIX 正则表达式匹配操作符:
操作符 | 描述 |
---|---|
~ | 匹配正则表达式,大小写敏感 |
~* | 匹配正则表达式,大小写不敏感 |
!~ | 不匹配正则表达式,大小写敏感 |
!~* | 不匹配正则表达式,大小写不敏感 |
示例:
postgres=# SELECT 'abc' ~ 'abc' ;
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' ~ '^a' ;
?column?
----------
t
(1 row)
postgres=# SELECT 'abc' ~ '^(b|c)';
?column?
----------
f
(1 row)